# # ================================
#   Создание собственных Модулей
# ================================

# В Python модуль - это просто питоновский (.py) файл
# import my_module - ищет файл my_module.py в определенных местах.

# Пути поиска модуля:
# 1. Домашний каталог проекта
# 2. Содержимое переменной окружения PYTHONPATH (если таковая есть)
# 3. Каталоги стандартной библиотеки
# 4. Содержимое любых файлов .pth

# Так можно посмотреть список текущих путей поиска:
import sys

print(sys.path)

import Module5.examples.my_libs.lib1 as lib1
print(lib1.do_something())

# from lesson05.examples.my_libs.lib1 import do_something, more_then_one


# Импортируем свой модуль
# Путь прописываем от корня проекта
# as - позволяет выбрать краткое имя для импортированного модуля
import Module5.examples.my_libs.lib1 as my_lib
print(my_lib.more_then_one(4))

# Или так
from Module5.examples.my_libs import *

print(lib1.do_something())

# Об именах:
# Поскольку имя файла модуля при импорте превращается в имя переменной,
# имя модуля должно следовать правилам именования переменных

# Импорт каждого модуля выполняется только ОДИН раз! - это сделано для экономии ресурсов

# Импорт запускает импортируемый файл - выполняя весь код в нем:
import Module5.examples.my_libs.lib2 as lib2
import math

# Выполняется вызов функции print() в модуле lib2
# Чтобы этого избежать используется конструкция:
if __name__ == "__main__":
    pass

# Нужно помнить, что т.к. импортируемый файл выполняется, следовательно из модуля
# доступны не только функции и классы, но и все переменные импортированного модуля
print(lib2.G)  # Переменная модуля lib2

# Не забываем, что инструкция def my_func, по сути, присваивает переменной my_func
# ссылку на объект-функцию
